import re
import requests
import os
import concurrent.futures
import subprocess

def merge_ts_to_mp4(ts_dir, output_file):
    """
    将ts_dir目录中的所有.ts文件合并为单个MP4文件
    :param ts_dir: 包含.ts文件的目录
    :param output_file: 输出的MP4文件路径
    """
    # 获取所有.ts文件并按数字顺序排序，并排出掉以.开头的文件
    ts_files = sorted(
        [f for f in os.listdir(ts_dir) if f.endswith('.ts') and not f.startswith('.')]
    )
    
    # 创建文件列表供ffmpeg使用
    list_file = os.path.join(ts_dir, 'file_list.txt')
    with open(list_file, 'w') as f:
        for ts_file in ts_files:
            f.write(f"file '{os.path.join(ts_dir, ts_file)}'\n")
    
    # 调用ffmpeg合并文件
    try:
        cmd = [
            'ffmpeg',
            '-f', 'concat',
            '-safe', '0',
            '-i', list_file,
            '-c', 'copy',
            output_file
        ]
        subprocess.run(cmd, check=True)
        print(f'成功合并文件到: {output_file}')
    except subprocess.CalledProcessError as e:
        print(f'合并文件失败: {e}')
    # finally:
        # 删除临时文件
        # if os.path.exists(list_file):
        #     os.remove(list_file)

if __name__ == '__main__':
    # 示例用法
    ts_dir = '/Users/yawn/Geil/m3u8/ssbx-20220711-2'
    # 合并为MP4
    output_mp4 = ts_dir + '.mp4'
    merge_ts_to_mp4(ts_dir, output_mp4)